import pandas as pd


# 1.读取数据
data = pd.read_csv("../../resources/p00_data_mining/stock_day.csv")
# 删除一些列
data = data.drop(["ma5","ma10","ma20","v_ma5","v_ma10","v_ma20"], axis=1)

# 2.索引操作
## 2.1 直接索引（先列后行）
a = data["open"]["2018-02-26"]
## 2.2 按名字索引
b = data.loc["2018-02-26", "open"]
## 2.3 按数字索引
c = data.iloc[1, 0]
## 2.4 组合索引
d = data.loc[data.index[0:4] , ['open', 'close', 'high', 'low']] # 获取第1天到第4天的 ['open', 'close', 'high', 'low']
e = data.iloc[0:4 , data.columns.get_indexer(['open', 'close', 'high', 'low'])]

# 3.值操作
data.open = 100 # 将open列所有值改成100
data["open"] = 100 # 将open列所有值改成100
data.iloc[1, 0] = 222 # 修改某个值

# 4.排序
data.sort_values(by=["high", "p_change"], ascending=False).head() # 对内容进行排序。ascending=False降序，ascending=True升序
data.sort_index()

# 5.DataFrame 运算
## 5.1 算数运算
data["open"].add(3).head() # 加法
data.sub(100).head() # 加法
data["close"].sub(data["open"]).head() # 减法

## 5.2 逻辑运算
data[data["p_change"] > 2].head() # 例如筛选p_change > 2的日期数据
data[(data["p_change"] > 2) & (data["low"] > 15)].head() # 完成一个多个逻辑判断， 筛选p_change > 2并且low > 15
data.query("p_change > 2 & low > 15").head() # 逻辑运算函数
f = data[data["turnover"].isin([4.19, 2.39])] # 判断'turnover'是否为4.19, 2.39

## 5.3 统计运算
data.describe() # 获取常用统计值
data.max(axis=0) # 获取最大值
data.idxmax(axis=0) # 获取最大值所在位置

## 5.4 累计统计函数
data["p_change"].sort_index().cumsum().plot()  # plot()画图

## 5.5 自定义运算
data.apply(lambda x: x.max() - x.min())


